#Boa:Dialog:ABMProductos

import wx
import wx.grid
import consultasBD
import utiles
from decimal import Decimal

ROJO = (255, 145, 145, 255)
VERDE = (145, 255, 145, 255)
AZUL = (145, 145, 255, 255)
BLANCO = (255, 255, 255, 255)
AMARILLO = (254, 248, 191, 255)
GRIS = ( 220, 220, 220, 255)
NEGRO = ( 0, 0, 0, 255)
VERDENEGRO = ( 47, 79, 79, 255)

def create(parent):
    return ABMProductos(parent)

[wxID_ABMPRODUCTOS, wxID_ABMPRODUCTOSBUTTON2, wxID_ABMPRODUCTOSBUTTON3, 
 wxID_ABMPRODUCTOSBUTTON4, wxID_ABMPRODUCTOSBUTTON5, 
 wxID_ABMPRODUCTOSCOMBOBOX1, wxID_ABMPRODUCTOSCOMBOBOX2, 
 wxID_ABMPRODUCTOSCOMBOBOX3, wxID_ABMPRODUCTOSSTATICTEXT1, 
 wxID_ABMPRODUCTOSSTATICTEXT14, wxID_ABMPRODUCTOSSTATICTEXT15, 
 wxID_ABMPRODUCTOSSTATICTEXT16, wxID_ABMPRODUCTOSSTATICTEXT17, 
 wxID_ABMPRODUCTOSSTATICTEXT18, wxID_ABMPRODUCTOSSTATICTEXT2, 
 wxID_ABMPRODUCTOSSTATICTEXT3, wxID_ABMPRODUCTOSSTATICTEXT4, 
 wxID_ABMPRODUCTOSSTATICTEXT5, wxID_ABMPRODUCTOSSTATICTEXT6, 
 wxID_ABMPRODUCTOSSTATICTEXT7, wxID_ABMPRODUCTOSSTATICTEXT8, 
 wxID_ABMPRODUCTOSSTATICTEXT9, wxID_ABMPRODUCTOSTEXTCTRL1, 
 wxID_ABMPRODUCTOSTEXTCTRL12, wxID_ABMPRODUCTOSTEXTCTRL13, 
 wxID_ABMPRODUCTOSTEXTCTRL14, wxID_ABMPRODUCTOSTEXTCTRL15, 
 wxID_ABMPRODUCTOSTEXTCTRL2, wxID_ABMPRODUCTOSTEXTCTRL3, 
 wxID_ABMPRODUCTOSTEXTCTRL4, wxID_ABMPRODUCTOSTEXTCTRL5, 
 wxID_ABMPRODUCTOSTEXTCTRL6, wxID_ABMPRODUCTOSTEXTCTRL7, 
 wxID_ABMPRODUCTOSTEXTCTRL8, 
] = [wx.NewId() for _init_ctrls in range(34)]

class ABMProductos(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_ABMPRODUCTOS, name='ABMProductos',
              parent=prnt, pos=wx.Point(313, 229), size=wx.Size(450, 316),
              style=wx.DEFAULT_DIALOG_STYLE, title='Modificar PTC')
        self.SetClientSize(wx.Size(442, 289))

        self.textCtrl1 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL1,
              name='textCtrl1', parent=self, pos=wx.Point(16, 32),
              size=wx.Size(64, 21), style=0, value='')
        self.textCtrl1.Enable(True)
        self.textCtrl1.SetEditable(True)

        self.button2 = wx.Button(id=wxID_ABMPRODUCTOSBUTTON2, label='Buscar',
              name='button2', parent=self, pos=wx.Point(88, 32),
              size=wx.Size(75, 23), style=0)
        self.button2.Enable(True)
        self.button2.Bind(wx.EVT_BUTTON, self.OnBuscar,
              id=wxID_ABMPRODUCTOSBUTTON2)

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_ABMPRODUCTOSCOMBOBOX1,
              name='comboBox1', parent=self, pos=wx.Point(16, 224),
              size=wx.Size(64, 21), style=0, value='')
        self.comboBox1.SetLabel('')
        self.comboBox1.Enable(False)

        self.comboBox2 = wx.ComboBox(choices=[], id=wxID_ABMPRODUCTOSCOMBOBOX2,
              name='comboBox2', parent=self, pos=wx.Point(88, 224),
              size=wx.Size(107, 21), style=0, value='')
        self.comboBox2.SetLabel('')
        self.comboBox2.Enable(False)

        self.textCtrl8 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL8,
              name='textCtrl8', parent=self, pos=wx.Point(200, 224),
              size=wx.Size(40, 21), style=0, value='')
              
        self.button3 = wx.Button(id=wxID_ABMPRODUCTOSBUTTON3, label='Guardar',
              name='button3', parent=self, pos=wx.Point(16, 256),
              size=wx.Size(75, 23), style=0)
        self.button3.Enable(False)
        self.button3.Bind(wx.EVT_BUTTON, self.OnGuardar,
              id=wxID_ABMPRODUCTOSBUTTON3)

        self.button5 = wx.Button(id=wxID_ABMPRODUCTOSBUTTON5, label='Limpiar',
              name='button5', parent=self, pos=wx.Point(256, 256),
              size=wx.Size(75, 23), style=0)
        self.button5.Bind(wx.EVT_BUTTON, self.OnLimpiar,
              id=wxID_ABMPRODUCTOSBUTTON5)

        self.button4 = wx.Button(id=wxID_ABMPRODUCTOSBUTTON4, label='Salir',
              name='button4', parent=self, pos=wx.Point(352, 256),
              size=wx.Size(75, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnSalir,
              id=wxID_ABMPRODUCTOSBUTTON4)

        self.textCtrl2 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL2,
              name='textCtrl2', parent=self, pos=wx.Point(176, 32),
              size=wx.Size(64, 21), style=0, value='')
        self.textCtrl2.SetEditable(False)
        self.textCtrl2.Enable(True)

        self.textCtrl3 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL3,
              name='textCtrl3', parent=self, pos=wx.Point(240, 32),
              size=wx.Size(192, 21), style=0, value='')
        self.textCtrl3.Enable(True)
        self.textCtrl3.SetEditable(False)

        self.textCtrl4 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL4,
              name='textCtrl4', parent=self, pos=wx.Point(88, 80),
              size=wx.Size(344, 21), style=0, value='')
        self.textCtrl4.Enable(True)
        self.textCtrl4.SetEditable(False)

        self.staticText1 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT1,
              label='Proveedor', name='staticText1', parent=self,
              pos=wx.Point(176, 16), size=wx.Size(50, 13), style=0)

        self.staticText4 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT4,
              label='P.T.C.', name='staticText4', parent=self, pos=wx.Point(16,
              16), size=wx.Size(31, 13), style=0)

        self.staticText5 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT5,
              label='Estacion', name='staticText5', parent=self,
              pos=wx.Point(88, 104), size=wx.Size(40, 13), style=0)

        self.staticText6 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT6,
              label='Anio', name='staticText6', parent=self, pos=wx.Point(152,
              104), size=wx.Size(21, 13), style=0)

        self.staticText7 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT7,
              label='Descripcion', name='staticText7', parent=self,
              pos=wx.Point(88, 64), size=wx.Size(54, 13), style=0)

        self.staticText8 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT8,
              label='Grupo', name='staticText8', parent=self, pos=wx.Point(208,
              104), size=wx.Size(29, 13), style=0)

        self.textCtrl5 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL5,
              name='textCtrl5', parent=self, pos=wx.Point(88, 120),
              size=wx.Size(64, 21), style=0, value='')
        self.textCtrl5.Enable(True)
        self.textCtrl5.SetEditable(False)

        self.textCtrl6 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL6,
              name='textCtrl6', parent=self, pos=wx.Point(152, 120),
              size=wx.Size(40, 21), style=0, value='')
        self.textCtrl6.Enable(True)
        self.textCtrl6.SetEditable(False)

        self.textCtrl7 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL7,
              name='textCtrl7', parent=self, pos=wx.Point(208, 120),
              size=wx.Size(224, 21), style=0, value='')
        self.textCtrl7.SetEditable(False)
        self.textCtrl7.Enable(True)

        self.staticText2 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT2,
              label='Talle', name='staticText2', parent=self, pos=wx.Point(16,
              208), size=wx.Size(22, 13), style=0)

        self.staticText3 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT3,
              label='Color', name='staticText3', parent=self, pos=wx.Point(88,
              208), size=wx.Size(25, 13), style=0)

        self.staticText14 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT14,
              label='Precio', name='staticText14', parent=self,
              pos=wx.Point(376, 192), size=wx.Size(29, 13), style=0)

        self.staticText15 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT15,
              label='Venta', name='staticText15', parent=self, pos=wx.Point(376,
              208), size=wx.Size(29, 13), style=0)

        self.textCtrl12 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL12,
              name='textCtrl12', parent=self, pos=wx.Point(376, 224),
              size=wx.Size(56, 21), style=wx.TE_RIGHT | wx.TE_LEFT,
              value='0.00')
        self.textCtrl12.SetEditable(False)

        self.staticText16 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT16,
              label='CodSussan', name='staticText16', parent=self,
              pos=wx.Point(16, 64), size=wx.Size(53, 13), style=0)

        self.textCtrl13 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL13,
              name='textCtrl13', parent=self, pos=wx.Point(16, 80),
              size=wx.Size(64, 21), style=0, value='')
        self.textCtrl13.Enable(True)
        self.textCtrl13.SetEditable(False)

        self.staticText17 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT17,
              label='Temporada', name='staticText17', parent=self,
              pos=wx.Point(88, 144), size=wx.Size(54, 13), style=0)

        self.staticText18 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT18,
              label='Rubro', name='staticText18', parent=self, pos=wx.Point(208,
              144), size=wx.Size(29, 13), style=0)

        self.textCtrl14 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL14,
              name='textCtrl14', parent=self, pos=wx.Point(48, 160),
              size=wx.Size(32, 21), style=0, value='')
        self.textCtrl14.SetEditable(True)
        self.textCtrl14.Show(False)

        self.textCtrl15 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL15,
              name='textCtrl15', parent=self, pos=wx.Point(208, 160),
              size=wx.Size(224, 21), style=0, value='')
        self.textCtrl15.SetEditable(False)

        self.comboBox3 = wx.ComboBox(choices=[], id=wxID_ABMPRODUCTOSCOMBOBOX3,
              name='comboBox3', parent=self, pos=wx.Point(88, 160),
              size=wx.Size(120, 21), style=0, value='')
        self.comboBox3.SetLabel('')
        self.comboBox3.Enable(False)

        self.staticText9 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT9,
              label='Peso (kg)', name='staticText9', parent=self,
              pos=wx.Point(200, 208), size=wx.Size(45, 13), style=0)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.cargarTalle()
        self.cargarColor()
        self.cargaTemporadaCombo()
        self.inicializar(GRIS)

    def inicializar(self, color=BLANCO):
        self.textCtrl1.SetBackgroundColour(BLANCO)
        self.textCtrl2.SetBackgroundColour(color)
        self.textCtrl3.SetBackgroundColour(color)
        self.textCtrl4.SetBackgroundColour(color)
        self.textCtrl5.SetBackgroundColour(color)
        self.textCtrl6.SetBackgroundColour(color)
        self.textCtrl7.SetBackgroundColour(color)
        self.textCtrl12.SetBackgroundColour(color)
        self.textCtrl13.SetBackgroundColour(color)
        self.textCtrl14.SetBackgroundColour(color)
        self.textCtrl15.SetBackgroundColour(color)

    def cargaTemporadaCombo(self):
        anioinicial = 2008
        anioactual = int(utiles.obtenerFecha("Y-m-d")[:4])
        while anioinicial<=anioactual:
            self.comboBox3.Append("INVIERNO"+str(anioinicial))
            self.comboBox3.Append("VERANO"+str(anioinicial))
            anioinicial+= 1
        self.comboBox3.Append("INVIERNO"+str(anioinicial))
        self.comboBox3.SetEditable(False)

    def habilita(self,habilita=True):
        self.textCtrl1.SetEditable(not habilita)
        self.button2.Enable(not habilita)
        self.comboBox1.Enable(habilita)
        self.comboBox2.Enable(habilita)
        self.comboBox3.Enable(habilita)
        self.button3.Enable(habilita)

    def OnLimpiar(self, event):
        self.textCtrl1.SetLabel("")
        self.textCtrl1.SetBackgroundColour(BLANCO)
        self.textCtrl2.SetLabel("")
        self.textCtrl3.SetLabel("")
        self.textCtrl4.SetLabel("")
        self.textCtrl5.SetLabel("")
        self.textCtrl6.SetLabel("")
        self.textCtrl7.SetLabel("")
        self.textCtrl8.SetLabel("")
        self.textCtrl12.SetLabel("0.00")
        self.textCtrl13.SetLabel("")
        self.comboBox1.SetSelection(-1)
        self.comboBox2.SetSelection(-1)
        self.habilita(False)
        self.textCtrl1.SetFocus()

    def OnSalir(self, event):
        self.Close()

    def OnBuscar(self, event):
        if self.textCtrl1.GetLabel()=="":
            utiles.mensaje(None,"Debe introducir un P.T.C.")
            self.textCtrl1.SetFocus()
            return
        ptc = self.textCtrl1.GetLabel()
        sql = "SELECT codsussan,talle,color,temporada,peso FROM producto_talle_color WHERE id='"+ptc+"' "
        resultado = consultasBD.ordenCrudaDict(sql)
        if len(resultado)!=1 or resultado==None or resultado==():
            utiles.mensaje(None,"Error: no existe el PTC o no es unico")
            return
        datos1 = resultado[0]
        r1 = "SELECT * FROM productos,proveedor,grupos,rubros "
        r2 = "WHERE productos.codsussan='"+datos1["codsussan"]+"' "
        r3 = "      AND productos.proveedor=proveedor.idproveedor "
        r4 = "      AND productos.grupo=grupos.idgrupo AND grupos.idgrupo=rubros.idgrupo "
        sql = r1+r2+r3+r4
        resultado = consultasBD.ordenCrudaDict(sql)
        if len(resultado)!=1 or resultado==None or resultado==():
            utiles.mensaje(None,"Error: no existe CodSussan asociado al PTC")
            return
        datos2 = resultado[0]
        
        codsussan = str(datos2["codsussan"])
        descripcion = str(datos2["descri"])
        idproveedor = str(datos2["idproveedor"])
        nombre = str(datos2["nombre"])
        estacion = str(datos2["estacion"])
        anio = str(datos2["anio"])
        grupo = str(datos2["grupo"])
        nombregrupo = str(datos2["nombregrupo"])
        pventa = str(datos2["preciolt1"])
        talle = str(datos1["talle"])
        color = str(datos1["color"])
        peso = str(datos1["peso"])
        temporada = str(datos1["temporada"])
        rubro = str(datos2["nombrerubro"])
        
        self.textCtrl2.SetLabel(idproveedor)
        self.textCtrl3.SetLabel(nombre)
        self.textCtrl13.SetLabel(codsussan)
        self.textCtrl4.SetLabel(descripcion)
        self.textCtrl5.SetLabel(estacion)
        self.textCtrl6.SetLabel(anio)
        self.textCtrl8.SetLabel(peso)
        self.textCtrl7.SetLabel(nombregrupo+" / "+grupo)
        self.textCtrl12.SetLabel(pventa)
        
        #self.textCtrl14.SetLabel(temporada)
        for i,item in enumerate(self.comboBox3.GetItems()):
            if item==temporada:
                self.comboBox3.SetSelection(i)
                break
        
        self.textCtrl15.SetLabel(rubro)

        for i,item in enumerate(self.comboBox1.GetItems()):
            if item==talle:
                self.comboBox1.SetSelection(i)
                break
        for i,item in enumerate(self.comboBox2.GetItems()):
            aux1,aux2 = item.split(" / ")
            aux1 = int(color)
            aux2 = int(aux2)
            if aux1==aux2:
                self.comboBox2.SetSelection(i)
                break

        self.textCtrl1.SetBackgroundColour(GRIS)
        self.habilita()
        self.comboBox1.SetFocus()

    def verificarGuardar(self):
        if self.comboBox1.GetSelection()<0:
            utiles.mensaje(None,"Debe especificar Talle")
            self.comboBox1.SetFocus()
            return False
        if self.comboBox2.GetSelection()<0:
            utiles.mensaje(None,"Debe especificar Color")
            self.comboBox2.SetFocus()
            return False
        if self.textCtrl8.GetLabel() == "":
            utiles.mensaje(None,"Debe especificar Peso (kg)")
            self.textCtrl8.SetFocus()
            return False
        ptc = self.textCtrl1.GetLabel()
        codsussan = self.textCtrl13.GetLabel()
        talle = self.comboBox1.GetLabel()
        peso = self.textCtrl8.GetLabel()
        aux1,color = self.comboBox2.GetLabel().split(" / ")
        r1 = "SELECT * FROM producto_talle_color WHERE "
        r2 = "id='"+ptc+"' AND codsussan='"+codsussan+"' AND "
        r3 = "talle='"+talle+"' AND color='"+color+"' AND peso='"+peso+"' "
        sql = r1+r2+r3
        resultado = consultasBD.ordenCruda(sql)
        if len(resultado)!=0:
            texto = "ATENCION: ya existe la combinacion\n"
            texto+= "de PTC, CodSussan, Talle y Color.\n"
            texto+= "Si corresponde, haga un ajuste al Stock."
            utiles.mensaje(None,texto)
            return False

        return True

    def cargarTalle(self):
        consultaSQL = "SELECT DISTINCT talle FROM producto_talle_color WHERE 1 ORDER BY talle"
        resultados = consultasBD.ordenCruda(consultaSQL)
        for item in resultados:
            self.comboBox1.Append(str(item[0]))

    def cargarColor(self):
        consultaSQL = "SELECT nombre,idcolor FROM colores WHERE 1 ORDER BY nombre"
        resultados = consultasBD.ordenCruda(consultaSQL)
        for item in resultados:
            self.comboBox2.Append(item[0]+" / "+str(item[1]))

    def OnGuardar(self, event):
        if not self.verificarGuardar():
            return
        ptc = self.textCtrl1.GetLabel()
        codsussan = self.textCtrl13.GetLabel()
        talle = self.comboBox1.GetLabel()
        temporada = self.comboBox3.GetLabel()
        peso = self.textCtrl8.GetLabel()
        aux1,color = (self.comboBox2.GetLabel()).split(" / ")
        
        r1 = "UPDATE producto_talle_color "
        r2 = "SET talle='%s',color='%s',temporada='%s',peso='%s' " % (talle,color,temporada,peso)
        r3 = "WHERE id='%s' AND codsussan='%s' " % (ptc,codsussan)
        sql = r1+r2+r3
        
        consultasBD.begin()        
        consultasBD.executaSinCommit(None, sql)
        consultasBD.commit()

        utiles.mensaje(None,"P.T.C. modificado")
        self.OnLimpiar(None)
